-- 通用工具函数模块

local cr = {}
local lrSDK = require("老狼孩插件懒人免ROOT无障碍版")

-- 等待函数，默认等待1秒
function cr.等待(时间)
    时间 = 时间 or 1000  -- 如果没有传入时间参数，默认为1秒
    sleep(时间)
end

-- 获取屏幕分辨率
function cr.获取屏幕分辨率()
    -- 尝试使用 getDisplaySize() 获取屏幕分辨率
    local width, height = getDisplaySize()
    if not width or not height then
        -- 如果获取失败，使用默认分辨率
        width, height = 720, 1280
        lrSDK.日志类_调试输出("无法获取屏幕分辨率，使用默认值: " .. width .. "x" .. height)
    end
    
    -- 自动设置节点配置的分辨率
    if lrSDK.设置分辨率 then
        lrSDK.设置分辨率(width, height)
    end
    
    return width, height
end

-- 计算滑动参数
function cr.计算滑动参数(屏幕宽度, 屏幕高度)
    -- 计算基础参数
    local 中心x = math.floor(屏幕宽度 * 0.5)
    local 安全边距 = math.floor(屏幕宽度 * 0.15)  -- 屏幕15%作为安全边距
    local 底部y = math.floor(屏幕高度 * 0.85)     -- 屏幕85%位置
    local 顶部y = math.floor(屏幕高度 * 0.15)     -- 屏幕15%位置
    
    -- 计算x轴随机范围
    local x轴随机范围 = math.floor(屏幕宽度 * 0.3)  -- 屏幕宽度的30%作为随机范围
    
    -- 添加反弹参数
    local 反弹距离 = math.floor(屏幕高度 * 0.05)  -- 屏幕高度的5%作为反弹距离
    
    return {
        中心x = 中心x,
        安全边距 = 安全边距,
        底部y = 底部y,
        顶部y = 顶部y,
        x轴随机范围 = x轴随机范围,
        反弹距离 = 反弹距离
    }
end

-- 缓慢滑动函数
function cr.缓慢滑动(startX, startY, endX, endY, duration)
    duration = duration or 1000  -- 默认滑动时间1秒
    
    -- 获取屏幕参数
    local width, height = cr.获取屏幕分辨率()
    local params = cr.计算滑动参数(width, height)
    
    -- 计算反弹效果的终点
    local rebound_endX = endX
    local rebound_endY = endY
    
    -- 添加反弹效果：如果是向上滑动
    if endY < startY then
        -- 向上滑动，终点Y需要减去反弹距离(更上方一点)
        rebound_endY = endY - params.反弹距离
    -- 如果是向下滑动
    elseif endY > startY then
        -- 向下滑动，终点Y需要加上反弹距离(更下方一点)
        rebound_endY = endY + params.反弹距离
    -- 如果是向左滑动
    elseif endX < startX then
        -- 向左滑动，终点X需要减去反弹距离(更左一点)
        rebound_endX = endX - params.反弹距离
    -- 如果是向右滑动
    elseif endX > startX then
        -- 向右滑动，终点X需要加上反弹距离(更右一点)
        rebound_endX = endX + params.反弹距离
    end
    
    -- 先执行带反弹的滑动
    lrSDK.触控类_滑动坐标(
        startX, startY,             -- 起始坐标
        rebound_endX, rebound_endY, -- 反弹终点坐标
        duration * 0.8              -- 使用80%的时间到达反弹点
    )
    
    -- 短暂等待
    cr.等待(100)
    
    -- 然后反弹回正确位置
    local result = lrSDK.触控类_滑动坐标(
        rebound_endX, rebound_endY, -- 反弹点坐标
        endX, endY,                 -- 实际终点坐标
        duration * 0.2              -- 使用20%的时间完成反弹
    )
    
    cr.等待(500)  -- 滑动后等待界面稳定
    return result
end

-- 向上滑动一屏
function cr.向上滑动()
    -- 获取屏幕分辨率
    local width, height = cr.获取屏幕分辨率()
    -- 计算滑动参数
    local params = cr.计算滑动参数(width, height)
    
    -- 在x轴范围内随机选择一个点
    local random_x = params.中心x + math.random(-params.x轴随机范围/2, params.x轴随机范围/2)
    -- 确保x不超出安全边距
    random_x = math.max(params.安全边距, math.min(width - params.安全边距, random_x))
    
    -- 执行滑动
    return cr.缓慢滑动(random_x, params.底部y, random_x, params.顶部y)
end

return cr

